#include "configwidget.h"

// Qt Includes
#include <QtDebug>
#include <QList>
#include <QDomDocument>

// Local Includes
#include "plugin.h"

/////////////////////////////////////////////////////////////////////
// Construction & Destruction
/////////////////////////////////////////////////////////////////////
CConfigWidget::CConfigWidget(QWidget *pParent/* = NULL*/, Qt::WFlags windowFlags/* = 0*/)
	: QWidget(pParent, windowFlags)
{
	setupUi(this);
}

CConfigWidget::~CConfigWidget()
{
	qDeleteAll(m_lstPlugins);
}
/////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////
// Member Functions
/////////////////////////////////////////////////////////////////////
void CConfigWidget::setConfigPayload(const QString &strXml)
{
	QDomDocument xmlDocument;

	if(!xmlDocument.setContent(strXml))
		return;

	// Clear out any existing plugins.
	qDeleteAll(m_lstPlugins);
	m_lstPlugins.clear();

	const QDomElement xmlDocumentElement = xmlDocument.documentElement();

	if(xmlDocumentElement.isNull())
		return;

	const QDomNodeList xmlNodeList = xmlDocumentElement.childNodes();
	const int nNodeListCount = xmlNodeList.count();

	if(nNodeListCount == 0)
		return;

	for(int i = 0; i < nNodeListCount; i++)
	{
		const QDomNode xmlNode = xmlNodeList.at(i);

		if(xmlNode.isNull())
			continue;

		const QString strNodeName = xmlNode.nodeName();

		if(strNodeName == tr("plugin"))
		{
			CPlugin *const pPlugin = new CPlugin;

			if(!pPlugin->loadFromXml(xmlNode.toElement()))
			{
				delete pPlugin;
				continue;
			}

			m_lstPlugins.append(pPlugin);
			continue;
		}
	}

	updatePluginListWidget();
}

void CConfigWidget::updatePluginListWidget()
{
	m_pPluginListWidget->clear();

	const int nPluginCount = m_lstPlugins.count();

	if(nPluginCount == 0)
		return;

	foreach(CPlugin *pPlugin, m_lstPlugins)
	{
		m_pPluginListWidget->addItem(QString("%1 (%2) - %3")
				.arg(pPlugin->getPluginName())
				.arg(CPlugin::pluginTypeToString(pPlugin->getPluginType()))
				.arg(pPlugin->getDescription()));
	}
}
/////////////////////////////////////////////////////////////////////
